home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / et / et-2_2.lha / et2.2 / src / Form.C < prev    next >
C/C++ Source or Header  |  1990-12-04  |  2KB  |  123 lines

  1. //$Form$
  2.  
  3. #include "Form.h"
  4. #include "BorderItems.h"
  5. #include "OrdColl.h"
  6.  
  7. MetaImpl0(Form);
  8.  
  9. Form::Form(int id, VObjAlign a, Point g, Collection *cp) : Cluster(id, a, g, cp)
  10. {
  11.     transposed= FALSE;
  12. }
  13.  
  14. Form::Form(int id, VObjAlign a, Point g, VObject *va_(vop), ...)
  15.                         : Cluster(id, a, g, (Collection*)0)
  16. {
  17.     transposed= FALSE;
  18.     va_list ap;
  19.     va_start(ap, va_(vop));
  20.     Add(va_(vop));
  21.     SetItems(ap);
  22.     Init(a, g);
  23.     va_end(ap);
  24. }
  25.  
  26. Form::Form(int id, VObjAlign a, Point g, char* va_(label), ...) 
  27.                         : Cluster(id, a, g, (Collection*)0)
  28. {
  29.     transposed= FALSE;
  30.     va_list ap;
  31.     va_start(ap, va_(label));
  32.     char *s;
  33.     VObject *vop;
  34.     Add(new TextItem(va_(label)));
  35.     for (int i= 1; ; i++) {
  36.     if (EVEN(i)) 
  37.         if (s= va_arg(ap, char*))
  38.         Add(new TextItem(s));
  39.         else
  40.         break;
  41.     else
  42.         if (vop= va_arg(ap, VObject*))
  43.         Add(new BorderItem(vop,1));
  44.         else
  45.         break;
  46.     }
  47.     Init((VObjAlign)(a|eVObjVBase), g);
  48.     va_end(ap);
  49. }
  50.  
  51. void Form::Transpose()
  52. {
  53.     Collection *tmp= new OrdCollection(list->Size());
  54.     int i,j;
  55.     for (i= 0; i < cols; i++)
  56.     for (j= 0; j < rows; j++) 
  57.         tmp->Add(At(i+j*cols));
  58.     SafeDelete(list);
  59.     list= tmp;
  60.     transposed= TRUE;
  61. }
  62.  
  63. short Form::CalcCols()
  64. {
  65.     return 2;
  66. }
  67.  
  68. void Form::CacheMinSize()
  69. {
  70.     if (!transposed)
  71.     Transpose();
  72.     Cluster::CacheMinSize();
  73. }
  74.  
  75. void Form::SetOrigin(Point at)
  76. {
  77.     register VObject *dip;
  78.     register int x, y;
  79.     Point a;
  80.     VObjAlign va,ta;
  81.     
  82.     VObject::SetOrigin(at);
  83.     
  84.     a.x= at.x;
  85.     ta= (VObjAlign)(align & ~(eVObjHLeft|eVObjHCenter|eVObjHRight));
  86.     for (x= 0; x < cols; x++) {
  87.     a.y= at.y;
  88.     for (y= 0; y < rows; y++) {
  89.         if (dip= GetItem(x,y)) {
  90.         va= ta;
  91.         switch(x) {
  92.         case 0:
  93.             switch(align & eVObjH) {
  94.             case eVObjHLeft:
  95.             va= (VObjAlign)(va | eVObjHLeft); 
  96.             break;
  97.             case eVObjHCenter:
  98.             case eVObjHRight:
  99.             va= (VObjAlign)(va | eVObjHRight); 
  100.             break;
  101.             }
  102.             break;
  103.  
  104.         case 1:   
  105.             switch(align & eVObjH) {
  106.             case eVObjHLeft:
  107.             case eVObjHCenter:
  108.             va= (VObjAlign)(va | eVObjHLeft); 
  109.             break;
  110.             case eVObjHRight: 
  111.             va= (VObjAlign)(va | eVObjHRight); 
  112.             break;
  113.             }
  114.             break;
  115.         }
  116.         dip->Align(a, Metric(wd[x], ht[y], bs[y]), va);
  117.         }
  118.         a.y+= ht[y] + actGap.y;
  119.     }
  120.     a.x+= wd[x] + actGap.x;
  121.     }
  122. }
  123.